package com.annotation.condition;

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * Conditon 接口是判断条件接口，在IOC容器注入bean的时候，如果加了@Condition注解，那么里面的value的值就是实现了Condition接口的实现类，来判断条件是否满足，如果满足，这个bean
 * 就注入，如果不满足，这个bean就不注入。
 * <p>
 * Condition放在方法上，默认是一个Bean进行判断，如果放在类上，那么就是给所有的bean进行判断
 */
public class CustomerCondition implements Condition {
    /**
     * @param context  ConditionContext            判断条件能使用的上下文环节
     * @param metadata AnnotatedTypeMetadata      当前标注了condition的注解的注释信息
     * @return
     */
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

        //获取IOC容器的beanFactory
        ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();

        //获取当前环境信息
        Environment environment = context.getEnvironment();

        //获取Bean定义的注册类
        BeanDefinitionRegistry registry = context.getRegistry();


        Class<? extends AnnotatedTypeMetadata> aClass = metadata.getClass();

        if (environment.getProperty("os.name").contains("Windows")) {
            return true;
        }
        return false;
    }
}
